import java.util.Scanner;
import java.util.*;
public class test2 {
   /* 给你一个长度为 n 的数组 apple 和另一个长度为 m 的数组 capacity 。
    一共有 n 个包裹，其中第 i 个包裹中装着 apple[i] 个苹果。同时，还有 m 个箱子，
    第 i 个箱子的容量为 capacity[i] 个苹果。
    请你选择一些箱子来将这 n 个包裹中的苹果重新分装到箱子中，返回你需要选择的箱子的 最小 数量。
    注意，同一个包裹中的苹果可以分装到不同的箱子中。*/
   public static int check(int n,int m,int[] apple,int[] capacity) {
       Arrays.sort(capacity);
       int resultcount=0;
       int sum=0;
       for(int i=0;i<n;i++){
           sum+=apple[i];
       }
       for(int i=m-1;i>=0;i--){
           sum-=capacity[i];
           resultcount++;
           if(sum<=0)break;
       }
       return resultcount;
   }
    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        int n=sc.nextInt();
        int[] apple=new int[n];
        for(int i=0;i<n;i++){
            apple[i]=sc.nextInt();
        }
        int m=sc.nextInt();
        int[] capacity=new int[m];
        for(int i=0;i<m;i++){
            capacity[i]=sc.nextInt();
        }
        int minboxcount=check(n,m,apple,capacity);
        System.out.println(minboxcount);
    }
}
